package com.iotp.dao.authority;

import com.iotp.entity.authority.Authority;
import org.apache.ibatis.annotations.Mapper;

import java.util.HashMap;
import java.util.List;


/**
 * 系统权限DAO接口
 * @author Assassin
 */
@Mapper
public interface AuthorityDAO {

	// Methods

   /**
	* 插入系统权限
	* @param authority 参数实体
	* @return authorityId 插入后的数据库主键值
	*/
	public Long insert(Authority authority);

   /**
	* 删除系统权限
	* @param authorityId 主键值
	*/
	public void delete(Long authorityId);

   /**
	* 更新系统权限
	* @param authority 参数实体
	*/
	public void update(Authority authority);

   /**
	* 主键查询系统权限
	* @return Authority 实体
	*/
	public Authority selectById(Long authorityId);

   /**
	* 根据条件查询系统权限列表
	* @param authority 参数实体
	* @return List<Authority> 实体List
	*/
	public List<Authority> selectList(Authority authority);
	
	/**
	 * 根据父Id查询子权限信息
	 * @param paramsMap 参数Map
	 * @return List<Authority>
	 */
	public List<Authority> selectSubList(HashMap<String, Object> paramsMap);
	
	/**
	 * 根据权限级别和父级别Id查询当前数据库权限最大编码
	 * @param paramsMap 参数Map
	 * @return currentMaxAuthorityCode
	 */
	public String selectCurrentMaxAuthorityCode(HashMap<String, Object> paramsMap);
	
	/**
	 * 更新权限是否父级信息
	 * @param paramsMap 参数Map
	 */
	public void updateIsParent(HashMap<String, Object> paramsMap);
	
	/**
	 * 编辑权限状态（逻辑删除 | 恢复）
	 * @param paramsMap 参数Map
	 */
	public void updateIsDel(HashMap<String, Object> paramsMap);
	
	/**
	 * 根据父权限Id更新权限状态（逻辑删除 | 恢复）
	 * @param paramsMap 参数Map
	 */
	public void updateIsDelByPid(HashMap<String, Object> paramsMap);
	
	/**
	 * 查询角色的权限
	 * @param roleId 角色Id
	 * @return List<Authority>
	 */
	public List<Authority> selectAuthorityByRoleId(Long roleId);
	
	/**
	 * 根据属性验证权限是否存在
	 * @param paramsMap 参数Map
	 * @return List<Authority>
	 */
	public List<Authority> selectIsAuthorityExist(HashMap<String, Object> paramsMap);
}